import { defineStore } from 'pinia';

export default {
    install(app)
    {
        const useSocketStore = defineStore('socket',{
            state: () => ({
              // 连接状态
              isConnected: false,
              // 消息内容
              content: '',
              // 重新连接错误
              reconnectError: false,
              // 心跳消息发送时间
              heartBeatInterval: 50000,
              // 心跳定时器
              heartBeatTimer: 0,
            }),
            actions: {
              // 连接打开
              SOCKET_ONOPEN(event) {
                this.isConnected = true;
                // 连接成功时启动定时发送心跳消息，避免被服务器断开连接
                this.heartBeatTimer = window.setInterval(() => {
                  const content = '心跳消息';
                  this.isConnected &&
                    app.config.globalProperties.$socket.sendObj({
                      code: 200,
                      msg: content,
                    });
                }, this.heartBeatInterval);
              },
              // 连接关闭
              SOCKET_ONCLOSE(event) {
                this.isConnected = false;
                // 连接关闭时停掉心跳消息
                window.clearInterval(this.heartBeatTimer);
                this.heartBeatTimer = 0;
                console.log('连接已断开: ' + new Date());
              },
              // 发生错误
              SOCKET_ONERROR(event) {
                console.error(event);
              },
              // 收到服务端发送的消息
              SOCKET_ONMESSAGE(content) {
                this.content = content;
              },
              // 自动重连
              SOCKET_RECONNECT(count) {
                console.info('消息系统重连中...', count);
              },
              // 重连错误
              SOCKET_RECONNECT_ERROR() {
                this.reconnectError = true;
              },
            },
          });
        //提取store数据是一个ref定义响应式
        const socketStore = useSocketStore()
        app.config.globalProperties.$socketStore = socketStore
    }
}